"""
基于 CrewAI 的投资决策智能体
"""
from crewai import Task
from agents.base_agent import CrewAIStockAgent
from typing import List, Dict, Any, Optional
from colorama import Fore, Style


class DecisionMakerAgent(CrewAIStockAgent):
    """基于 CrewAI 的投资决策智能体"""
    
    def __init__(self):
        # 决策智能体通常不需要特定工具，依赖分析结果
        super().__init__("decision_maker", tools=[])
        print(Fore.CYAN + f"    - [CrewAI] {self.config.name} 负责最终投资决策")
    
    def create_tasks(self, stock_code: str, analysis_task: Optional[Task] = None) -> List[Task]:
        """创建投资决策任务"""
        tasks = []
        
        # 任务1：投资策略制定
        strategy_task = Task(
            description=f"""
            基于股票 {stock_code} 的分析报告，制定投资策略：
            1. 确定投资目标和时间框架
            2. 制定进入和退出策略
            3. 设定止损和止盈位
            4. 确定仓位管理方案
            5. 制定风险控制措施
            
            请提供清晰、可执行的投资策略。
            """,
            expected_output="""
            投资策略应包含：
            - 投资目标（收益率目标）
            - 投资期限（短期/中期/长期）
            - 买入条件和时机
            - 卖出条件和信号
            - 仓位配置建议
            - 止损止盈设置
            """,
            agent=self.agent,
            context=[analysis_task] if analysis_task else []
        )
        tasks.append(strategy_task)
        
        # 任务2：投资建议生成
        recommendation_task = Task(
            description=f"""
            为股票 {stock_code} 生成明确的投资建议：
            1. 给出投资评级（强烈买入/买入/持有/卖出/强烈卖出）
            2. 提供置信度评分（0-100）
            3. 设定目标价格区间
            4. 明确投资时间窗口
            5. 列出主要理由和风险
            
            建议必须明确、具体、可操作。
            """,
            expected_output="""
            投资建议应包含：
            - 明确的投资评级
            - 置信度分数
            - 目标价格（具体数值）
            - 建议持有期限
            - 3-5个核心投资理由
            - 2-3个主要风险提示
            """,
            agent=self.agent,
            context=[analysis_task, strategy_task] if analysis_task else [strategy_task]
        )
        tasks.append(recommendation_task)
        
        # 任务3：执行计划制定
        execution_plan_task = Task(
            description=f"""
            制定股票 {stock_code} 的具体执行计划：
            1. 设计分批建仓方案
            2. 制定动态调仓策略
            3. 设置监控指标和预警条件
            4. 制定应急预案
            5. 规划定期复盘机制
            
            提供详细的操作指导和时间表。
            """,
            expected_output="""
            执行计划应包含：
            - 建仓步骤和时间安排
            - 每步的仓位比例
            - 关键监控指标
            - 调仓触发条件
            - 应急处理方案
            - 复盘时间表
            """,
            agent=self.agent,
            context=[strategy_task, recommendation_task]
        )
        tasks.append(execution_plan_task)
        
        # 任务4：最终决策报告
        final_decision_task = Task(
            description=f"""
            生成股票 {stock_code} 的最终投资决策报告：
            1. 整合所有分析和策略内容
            2. 提供执行摘要
            3. 明确行动建议
            4. 强调关键风险点
            5. 设定成功标准
            
            生成专业、完整、可执行的投资决策报告。
            """,
            expected_output="""
            最终决策报告格式：
            
            # 投资决策报告
            
            ## 执行摘要
            - 股票代码和名称
            - 投资评级
            - 目标价格
            - 预期收益
            
            ## 投资建议
            - 具体行动方案
            - 时间安排
            - 仓位配置
            
            ## 风险管理
            - 主要风险
            - 应对措施
            - 止损设置
            
            ## 监控计划
            - 关键指标
            - 复盘安排
            
            ## 免责声明
            """,
            agent=self.agent,
            context=[strategy_task, recommendation_task, execution_plan_task]
        )
        tasks.append(final_decision_task)
        
        print(Fore.GREEN + f"    - [CrewAI] {self.config.name} 创建了 {len(tasks)} 个决策任务")
        return tasks
    
    def get_summary(self) -> str:
        """获取智能体摘要"""
        return f"""
        🎯 投资决策智能体
        角色: {self.config.role}
        目标: {self.config.goal}
        输出: 投资评级、策略方案、执行计划
        """
